package com.small.base.redis.core;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * RedisInterface
 *
 * @author miajio
 */
public interface RedisInterface {

    /**
     * 设置过期时间
     * @param key
     * @param time
     * @param timeUnit
     * @return
     */
    boolean expire(String key, long time, TimeUnit timeUnit);

    /**
     * 获取过期时间
     * @param key
     * @param timeUnit
     * @return
     */
    long getTime(String key, TimeUnit timeUnit);

    /**
     * 获取过期时间
     * @param key
     * @return
     */
    long getTime(String key);

    /**
     * 判断key是否存在
     * @param key
     * @return
     */
    boolean hasKey(String key);

    /**
     * 删除指定key的过期时间
     * @param key
     * @return
     */
    boolean removeExpire(String key);

    /**
     * 将值存入缓存
     * @param key
     * @param value
     */
    void set(String key, String value);

    /**
     * 将值存入缓存并设置超时时间 -1 为无限制
     * @param key
     * @param value
     * @param time
     * @param timeUnit
     */
    void set(String key, String value, long time, TimeUnit timeUnit);

    /**
     * 批量添加key (重复值会被覆盖)
     * @param keyAndValueSet
     */
    void batchSet(Map<String, String> keyAndValueSet);

    /**
     * 批量添加key (只有key不存在时才被添加)
     * @param keyAndValueSet
     */
    void batchSetIfAbsent(Map<String, String> keyAndValueSet);

    /**
     * 获取key的值
     * @param key
     * @return
     */
    Object get(String key);
}
